package drep;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

/**
 * Universidad Simón Bolívar
 * Curso de Redes I - Taller
 * Profesor: Ricardo Gonzalez
 * Trimestre Enero-Marzo 2011
 *
 * Proyecto 2 RD
 *
 * @author Grupo 9
 * @author Richard Simoes Ferreira
 * @author Ricardo Tocco
 *
 * @version 1.0
 */
public class Promtp extends Thread {

/**
 *  Estructura que implementa la consola del programa drep
 */
    private ControlDrep control;
     /**
     * Constructor de la clase Promtp
     * @param c Estructura de control del programa dcli
     */
    public Promtp (ControlDrep c){
        this.control = c;
    }
     /**
     * Código que ejecuta el hilo encargado de implementar la consola
     */
    @Override
    public void run(){
        ErrorHandler errorH = new ErrorHandler();
        boolean fin = false;
        //Iniciar sesion
        control.iniciarSesion();

        while (!fin){
            try {
                BufferedReader teclado;
                String buf;
                String argumentos[];
                StringTokenizer tokens;

                teclado = new  BufferedReader(new InputStreamReader(System.in));
                System.out.print("DREP$>");
                String comando = null;
                if ((buf = teclado.readLine()) != null) {
                    if (!buf.equals("")) {

                        argumentos = buf.split("\\+");
                        tokens = new StringTokenizer(argumentos[0]);
                        comando = tokens.nextToken();

                        if (comando.equals("ldir")){
                        //Mostrará los nombres y tamaños de cada uno de los
                        //archivos locales al programa drep, es decir, de los
                        //archivos que estén contenidos en el directorio <rdirectorio>
                            if (tokens.hasMoreElements())
                                errorH.errorComandoDesconocido(comando);
                            else
                                control.ldir();
                        } else if (comando.equals("cat")){
                        //Listar por pantalla el contenido del archivo local
                        //tokens.nextToken() que debe estar en el directorio <rdirectorio>
                        //del programa drep
                            if(tokens.hasMoreElements()){
                                String s = "";
                                while (tokens.hasMoreElements())
                                    s += tokens.nextToken()+" ";
                                control.cat(s.substring(0, s.length()-1));
                            } else {
                                errorH.errorComandoDesconocido(comando);
                            }
                        } else if (comando.equals("help")||comando.equals("--help")){
                            ErrorHandler.imprimirAyudaConsola();
                        } else if (comando.equals("q")){
                            //Terminar el cliente
                            System.out.println("Terminando drep...");
                            control.cerrarSesion();
                            fin = true;
                        } else {
                            errorH.errorComandoDesconocido(comando);
                        }
                    }

                } else {
                    //Se ignora
                } //if NULL

            } catch (IOException ex){
                errorH.errorLecturaConsola(ex, control);
            }
        } // Fin While
    }//Fin run

}
